package com.rocky.study.volatitle;

/**
 * 没有同步下的共享变量
 */
public class NoVisibility {

    private static boolean ready ;
    private static int number;

    // 读线程进行循环,直到发现ready的值变为true,然后打印 number的值,虽然看起来输出 42,
    // 但实际上它很有可能打印0或者根本不会终止。这是因为它没有使用恰当的同步机制,没能保证主线程写入ready和number的值对读线程
    private static class ReaderThread extends Thread {
        public void run() {
            while(!ready) {
                Thread.yield();
            }
            System.out.println(number);
        }
    }

    public static void main(String[] args) {
        new ReaderThread().start();
        number = 42;
        ready  = true;
    }
}
